package cn.lili.modules.store.serviceimpl;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.utils.ResultUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.dto.StoreBindDTO;
import cn.lili.modules.store.entity.dto.StoreBindEditDTO;
import cn.lili.modules.system.client.SettingClient;
import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.enums.SettingEnum;
import com.api.UserApi;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.lili.modules.store.entity.dos.StoreBind;
import cn.lili.modules.store.service.StoreBindService;
import cn.lili.modules.store.mapper.StoreBindMapper;
//import com.pojos.FyUserInfo;
import com.pojos.FyUserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
* @author asus
* @description 针对表【li_store_bind】的数据库操作Service实现
* @createDate 2023-11-14 09:59:59
*/
@Service
public class StoreBindServiceImpl extends ServiceImpl<StoreBindMapper, StoreBind>
    implements StoreBindService{

    @Autowired
    private UserApi userApi;

    @Autowired
    private SettingClient settingClient;

    @Override
    public void disable(String id) {
        this.commonDisable(id);
    }

    private StoreBind commonDisable(String id) {
        StoreBind storeBind = super.getById(id);
        if (storeBind == null) {
            throw new ServiceException("未获取到数据");
        }
        //启用，需把其他人关闭
        LambdaUpdateWrapper<StoreBind> storeBindLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        storeBindLambdaUpdateWrapper.eq(StoreBind::getStoreId, UserContext.getCurrentUser().getExtendId());
        storeBindLambdaUpdateWrapper.set(StoreBind::getStatus, 0);
        super.update(storeBindLambdaUpdateWrapper);
        return storeBind;
    }
    @Override
    public void enable(String id) {
        StoreBind storeBind = this.commonDisable(id);

        //将自己设置成启用
        storeBind.setStatus(1);
        super.updateById(storeBind);
    }

    @Override
    public Boolean edit(StoreBindEditDTO storeBindEditDTO) {
        //启用，需把其他人关闭
        if (Integer.valueOf(1).equals(storeBindEditDTO.getStatus())) {
            LambdaUpdateWrapper<StoreBind> storeBindLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
            storeBindLambdaUpdateWrapper.eq(StoreBind::getStoreId, UserContext.getCurrentUser().getExtendId());
            storeBindLambdaUpdateWrapper.set(StoreBind::getStatus, 0);
            super.update(storeBindLambdaUpdateWrapper);
        }
        //更新飞语信息
        FyUserInfo fyUserInfo = userApi.getFyUserInfo(storeBindEditDTO.getFyAccount());
        if (fyUserInfo == null || StringUtils.isEmpty(fyUserInfo.getId())) {
            throw new ServiceException("未获取到飞语账号信息");
        }
        storeBindEditDTO.setFyAccount(fyUserInfo.getAccount());
        storeBindEditDTO.setFyId(fyUserInfo.getId());

        return super.updateById(storeBindEditDTO);
    }

    @Override
    public Boolean add(StoreBindDTO storeBindDTO) {
        //启用，需把其他人关闭
        if (Integer.valueOf(1).equals(storeBindDTO.getStatus())) {
            LambdaUpdateWrapper<StoreBind> storeBindLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
            storeBindLambdaUpdateWrapper.eq(StoreBind::getStoreId, UserContext.getCurrentUser().getExtendId());
            storeBindLambdaUpdateWrapper.set(StoreBind::getStatus, 0);
            super.update(storeBindLambdaUpdateWrapper);
        }
        FyUserInfo fyUserInfo = userApi.getFyUserInfo(storeBindDTO.getFyAccount());
        storeBindDTO.setFyAccount(fyUserInfo.getAccount());
        storeBindDTO.setFyId(fyUserInfo.getId());
        storeBindDTO.setStoreId(UserContext.getCurrentUser().getExtendId());
        return super.save(storeBindDTO);
    }

    @Override
    public StoreBind getStoreCustomerService(String storeId) {
        LambdaQueryWrapper<StoreBind> storeBindLambdaQueryWrapper = new LambdaQueryWrapper<>();
        storeBindLambdaQueryWrapper.eq(StoreBind::getStoreId, storeId);
        storeBindLambdaQueryWrapper.eq(StoreBind::getStatus, 1);
        storeBindLambdaQueryWrapper.last("limit 1");
        StoreBind storeBind = super.getOne(storeBindLambdaQueryWrapper);
        Setting setting = settingClient.get(SettingEnum.BIND_KEY_VALUE.name());
        if (setting != null && storeBind != null) {
            storeBind.setBindKeyValue(setting.getSettingValue());
        }
        return storeBind;
    }

}




